<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta http-equiv="X-UA-Compatible" content="IE=edge" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>Document</title>
	</head>
	<body>
		<script>
			// 函数可以作为一等(头等)公民
			// 1. 函数可以被赋值给变量
			var foo1 = function () {
				console.log('foo1函数被执行')
			}

			// 2. 让函数在变量之间来回传递
			var foo2 = foo1
			foo2()

			// 3. 函数可以传递给另外一个函数作为参数
			function bar(fn) {
				console.log('fn:', fn)
				fn()
			}
			bar(foo1)

			// 4. 函数作为另一个函数的返回值
			function sayHello(name) {
				function hi() {
					console.log('hi' + name)
				}
				return hi
			}

			var fn = sayHello('kobe') // 柯里化
			fn()

			// 5. 函数存储在另外一个数据结构中
			var obj = {
				name: 'abc',
				eatting: function () {
					console.log('eatting')
				},
			}

			obj.eatting()

			function bar1() {
				console.log('bar1')
			}
			function bar2() {
				console.log('bar2')
			}
			function bar3() {
				console.log('bar3')
			}

			// 事件总线的封装
			var fns = [bar1, bar2, bar3]
		</script>
	</body>
</html>
